﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Drawing;
using QuanCafe_DAO_WS;

namespace QuanCafe
{
    public class NhanVienDAO : DataProvider
    {
        // tạo 1 string làm link dẫn đến web lưu trữ ảnh
        private static string url = "http://www.quangcaokhacviet.somee.com/Image/NhanVien/";

        // viết hàm lấy lên danh sách nhân vien
        public List<NhanVienDTO> NV_LayDanhSachNhanVien()
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // lấy ra danh sách những nhân viên đã có: dùng lambda syntax
            var nhanViens = data.NhanViens.Where(temp => true);
            // tạo 1 biến trả về
            List<NhanVienDTO> nhanVienDTOs = new List<NhanVienDTO>();
            // truy vấn
            foreach (NhanVien nhanVien in nhanViens)
            {
                object obj = GetDataFromDataConText(nhanVien);
                nhanVienDTOs.Add((NhanVienDTO)obj);
            }
            return nhanVienDTOs;
        }


        /// viết hàm kiểm tra đăng ký
        /// FALSE: thất bại -> tài khoản đã được dùng
        /// TRUE: thành công
        public bool NV_DangKiThanhCong(string manhanvien, string tennhanvien, string matkhau, string catruc)
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
             // kiểm tra xem mã nhân viên có hay chưa
            if (NV_ChuaTonTaiMaNhanVien(manhanvien) == true)
            {
                // tạo 1 đối tượng nhân viên để add vào
                NhanVien nv = new NhanVien();
                nv.anhdaidien = url;
                nv.manhanvien = manhanvien;
                nv.matkhau = matkhau;
                nv.tennhanvien = tennhanvien;
                nv.calamviec = catruc;
                nv.tongsohoadon = 0;
                data.NhanViens.InsertOnSubmit(nv);
                data.SubmitChanges();
                return true;
            }

            return false;
            
        }


        /// viết hàm cập nhật mật khẩu
        ///FALSE: cập nhật không thành công
        public bool NV_CapNhatMatKhauThanhCong(string manhanvien, string matkhaucu, string matkhaumoi)
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
       
            // nếu có nhân viên -> tiến hành cập nhật
            if (NV_ChuaTonTaiNhanVien(manhanvien,matkhaucu) == false) // nhân viên có tồn tại
            {
                //lấy ra nhân viên cần cập nhật: Singel -> lấy ra phần tử duy nhất
                NhanVien nv = data.NhanViens.Single(temp => temp.manhanvien == manhanvien);
                // cập nhật lại nhân viên
                nv.matkhau = matkhaumoi;
                // cập nhật
                data.SubmitChanges();
                // thông báo cập nhật thành công
                return true;
            }
            else
            {
                return false; // cập nhật thất bại
            }
          

        }

        /// viết hàm cập nhật ảnh đại diện
        /// TRUE: cập nhật thành công
        public bool NV_CapNhatAnhDaiDienThanhCong(string manhanvien, string matkhau, string ten_anhdaidien)
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();

            // kiểm tra xem có tồn tại nhân viên ko
            if (NV_ChuaTonTaiNhanVien(manhanvien, matkhau) == false) // nhân viên có tồn tại
            {
                //lấy ra nhân viên cần cập nhật
                NhanVien nv = data.NhanViens.Single(temp => temp.manhanvien == manhanvien);
                // cập nhật lại ảnh đại diện
                nv.anhdaidien = url + ten_anhdaidien;
                // cập nhật
                data.SubmitChanges();
                // thông báo cập nhật thành công
                return true;
            }
            else
            {
                return false; // cập nhật thất bại
            }
        }

        /// viết hàm xóa nhân viên
        /// TRUE: xóa nhân viên thành công
        public bool NV_XoaNhanVienThanhCong(string manhanvien)
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            if (NV_ChuaTonTaiMaNhanVien(manhanvien) == false) // manhanvien có trong CSDL
            { 
                // xóa nhân viên đi
                // lấy ra nhân viên đó
                NhanVien nv = data.NhanViens.Single(temp => temp.manhanvien == manhanvien);

                // gọi hàm xóa
                data.NhanViens.DeleteOnSubmit(nv);
                // cập nhật CSDl
                data.SubmitChanges();
                // thông báo kết quả trả về
                return true;
            }
            return false;
        }

        // viết hàm xóa tất cả nhân viên
        public bool NV_XoaTatCaNhanVienThanhCong()
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            try
            {
                // lấy ra danh sách các nhân viên ( ko phải BOSS)
                var nhanViens = data.NhanViens.Where(temp => temp.manhanvien != "BOSS");
                // truy vấn
                foreach (NhanVien nhanVien in nhanViens)
                {
                    // xóa từng nhân viên
                    data.NhanViens.DeleteOnSubmit(nhanVien);
                }
                // cập nhật xuống CSDL
                data.SubmitChanges();
                // trả kết quả về
                return true;
                
            }
            catch
            {
                return false;
            }
        }
       
        /// kiểm tra xem mã nhân viên có tồn tại chưa
        /// FALSE: đã tồn tại
        public bool NV_ChuaTonTaiMaNhanVien(string manhanvien)
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // lấy ra danh sách những nhân viên đã có 
            var nhanViens = data.NhanViens.Where(i => true);
            // kiểm tra: Any(điều kiện): có bất kì phần tử nào thỏa không?
            if (nhanViens.Any(temp => temp.manhanvien == manhanvien))
            {
                return false;
            }
            else
            {
                return true;
            }
               
        }

        /// viết hàm kiểm tra nhân viên có tồn tại không
        /// FALSE: đã tồn tại
        public  bool NV_ChuaTonTaiNhanVien(string manhanvien, string matkhau)
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // lấy ra danh sách những nhân viên đã có 
            var nhanViens = data.NhanViens.Where(i => true);

            // kiểm tra: Any(điều kiện): có bất kì phần tử nào thỏa không?
            if (nhanViens.Any(temp => temp.manhanvien == manhanvien && temp.matkhau == matkhau))
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #region Một số phương thức để truy vấn

        // viết hàm xem thông tin của một nhân viên
        public NhanVienDTO NV_XemThongTinNhanVien(string manhanvien)
        {
            try
            {
                // tạo 1 biến LinkQ
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                if (NV_ChuaTonTaiMaNhanVien(manhanvien) == false) // manhanvien có trong CSDL
                {
                    // lấy ra nhân viên đó
                    NhanVien nv = data.NhanViens.Single(temp => temp.manhanvien == manhanvien);
                    // tạo 1 đối tượng NhanVienDTO
                    NhanVienDTO nhanVienDTO = new NhanVienDTO();
                    nhanVienDTO = (NhanVienDTO)GetDataFromDataConText(nv);
                    return nhanVienDTO;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception e)
            {
                return null;
            }
        }

        #endregion

        // đọc dữ liệu nhân viên
        private object GetDataFromDataConText(NhanVien nv)
        {
            NhanVienDTO nhanVienDTO = new NhanVienDTO();
            nhanVienDTO.Anhdaidien = nv.anhdaidien;
            nhanVienDTO.Manhanvien = nv.manhanvien;
            nhanVienDTO.Matkhau = nv.matkhau;
            nhanVienDTO.Tennhanvien = nv.tennhanvien;
            nhanVienDTO.Calamviec = nv.calamviec;
            nhanVienDTO.Tongsohoadon = (int)nv.tongsohoadon;

            return nhanVienDTO;
        }

    }
}
